﻿//源代码编码必须是: UTF-8(BOM)
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <QMessageBox>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

    QTcpSocket m_client;
    QTcpServer m_server;
    QString targetAddr;
    int targetPort;

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_btn_switch_clicked();           //打开连接按钮
    void on_tcpMode_currentIndexChanged(int index);   //用户状态
    void on_btn_send_clicked();             //发送按钮
    void on_betn_clear_clicked();           //清空按钮
    void on_tcpMode_activated(const QString &arg1);  // tcpMode（ComboBox）下拉框
    //客户端槽函数
    void onClientConnected();         //连接成功
    void onClientDisconnected();      //断开连接
    void onClientDataReady();         //接受信息
    void onClientBytesWritten(qint64 bytes);    //接受条数更新
    void onClientErr(QAbstractSocket::SocketError socketError);   //连接失败

    //服务器端槽函数
    void onServerNewConnection();     //客户端接入
    void onServerDisconnected();     //客户端断开连接
    void onServerDataReady();        //接受信息
    void onServerBytesWritten(qint64 bytes);    //接受条数更新

private:
    void startConnect(bool ison);  //不同连接状态的赋能

    void initClientSignals();   //初始化客户端信号槽
    bool startClient();         //启动客户端

    void initServerSignals();   //初始化服务器端信号槽
    bool startServer();     //启动服务器

    Ui::Widget *ui;
};

#endif // WIDGET_H
